import {defineStore} from "pinia";
import {getToken,setToken,removeToken} from "@/utils/auth.js";
import {jwtDecode} from "jwt-decode";
const useAuthStore = defineStore("auth", {
    state: () => ({
        token: getToken(),
        userInfo: null,
    }),
    actions: {
        // 登录成功的处理
        async loginSuccess(token,userInfo) {
            this.token = token;
            this.userInfo=userInfo;
            setToken(token);

        },
        // 登出删除token
        logoutSuccess() {
            this.token = null;
            this.userInfo = null;
            removeToken();
        },
        //检查是否登录,包括token已经过期的情况
        isAuthenticated() {
            //不存在token，则直接返回false
            if(!this.token) {
                return false;
            }
            try {
                //解析jwt,判断是否过期，过期则返回false,没有则返回true
                const decode = jwtDecode(this.token);
                console.log(Date.now(),decode.exp*1000);
                //现在的时间如果大于过期时间，则代表token已经过期，也要清除掉authStore中的token,返回false则代表没有认证
                const isExpired = Date.now()>= decode.exp * 1000;
                //已经过期
                if(isExpired){
                    removeToken();
                    this.token = null;
                    return false;
                }else{
                    return true;
                }
            }catch(err) {
                // 解析失败：清除无效token并返回false
                this.token = null;
                removeToken()
                return false;
            }
        }
    }
})
export default useAuthStore;